package jm.nj.demo17mian;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

/*
* 使用dom4j解析xml文档(读取xml文档中的内容)
*
* 1.SAXReader对象
*       read(...)  加载执行xml文档
* 2.Document对象
*       getRootElement()获得根元素
* Element对象
*       elements(...)获得指定名称的所有子元素,可以不指定名称
*       element()获得指定名称第一个子元素。可以不指定名称
*       getName() 获得当前元素的元素名
*       attributeValue(...)获得指定属性名的属性值
*       elementText(...)获得指定名称子元素的文本值
*       getText()获得当前元素的文本内容
*
* 使用步骤:
*       1.创建dom4j的核心类SAXReader对象
*       2.使用SAXRead中的read方法读取xml,生成Document对象
*       3.通过Document中的方法getRootElement获取所有的bean元素
*       4.通过根元素Element中的方法elements获取索取所有的bean元素
*       5.通过bean元素获取使用方法attributeValue获取元素的属性
		6.通过benan元素获取property元素
		7.通过property元素使用方法attributeValue获取元素的属性和文本
* */
public class DemoDom4jparseXML {
    public static void main(String[] args) throws Exception {
        SAXReader sax = new SAXReader();

        Document document = sax.read("beans.xml");
        //3.通过Document中的方法getRootElement获取根元素beans,返回的是一个Element对象
        Element rootElement = document.getRootElement();
        //打印元素的名字
        System.out.println(rootElement);
        //4.通过根元素Element中的方法elements获取所有的bean元素
        List<Element> beanElementList = rootElement.elements();
        for (Element beanElement : beanElementList) {
            System.out.println("\t" + beanElement.getName());
            //5.通过bean元素获取使用方法attributeValue获取元素的属性
            String beanId = beanElement.attributeValue("id");
            String beanClassName = beanElement.attributeValue("className");
            System.out.println("\t\tbean元素的属性id:" + beanId);
            System.out.println("\t\tbean元素的属性ClassName:" + beanClassName);

            //6.通过benan元素获取property元素
            List<Element> propertyElementList = beanElement.elements();
            //遍历propertyElementList集合
            for (Element propertyElement : propertyElementList) {
                System.out.println("\t\t\t" + propertyElement.getName());
                //7.通过property元素使用方法attributeValue获取元素的属性和文本
                String propertyName = propertyElement.attributeValue("name");
                String propertyValue = propertyElement.attributeValue("value");
                String propertyText = propertyElement.getText();
                System.out.println("\t\t\t\tproperty元素的属性name:" + propertyName);
                System.out.println("\t\t\t\tproperty元素的属性name:" + propertyValue);
                System.out.println("\t\t\t\tproperty元素的属性name:" + propertyText);


            }

        }

    }
}
